import { get, post, postWithQueryParams } from "@/api/request";

/**
 * 项目规划控制器 / 项目规划控制器项目规划提交
 * @param {object} data
 * @param {string} [data.approvalDate] 立项日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.approvingAuthority] 立项单位
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {number} [data.constructionArea] 建设面积
 * @param {string} [data.constructionCompletionDate] 计划竣工 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.constructionDurationDays] 建设周期（天）
 * @param {string} [data.constructionStartDate] 计划开工 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.contactNumber] 联系电话
 * @param {string} [data.endDate] 计划结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.implementingCompany] 项目实施公司
 * @param {string} [data.projectAddress] 项目地址
 * @param {number} [data.projectDurationDays] 项目周期（天）
 * @param {number} [data.projectLatitude] 项目纬度
 * @param {number} [data.projectLongitude] 项目经度
 * @param {string} [data.projectManager] 项目负责人
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {array<ProjectPhase传输实体>} [data.projectPhaseList] 项目阶段List
 * @param {string} [data.projectSummary] 项目概述
 * @param {string} [data.projectType] 工程类型
 * @param {array<RelatedOrganization传输实体>} [data.relatedOrganizationList] 相关单位信息
 * @param {string} [data.startDate] 计划开始日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 肖玮
 */
export function projectPlanningAdd(data, config) {
  return post("/projectPlanning/add", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器删除项目规划
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 肖玮
 */
export function projectPlanningDelete(params, data, config) {
  return postWithQueryParams("/projectPlanning/delete", params, data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器查询项目规划详情
 * @param {object} params
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<ProjectPlanning页面展示实体>}
 * @author 肖玮
 */
export function projectPlanningDetail(params, config) {
  return get("/projectPlanning/detail", params, config);
}

/**
 * 项目规划控制器 / 项目规划控制器项目规划导出
 * @param {object} data
 * @param {string} [data.approvalEndDate] 立项结束日期
 * @param {string} [data.approvalStartDate] 立项开始日期
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise}
 * @author 肖玮
 */
export function projectPlanningExport(data, config) {
  return post("/projectPlanning/export", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器项目规划列表
 * @param {object} data
 * @param {string} [data.approvalDate] 立项日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.approvingAuthority] 立项单位
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {number} [data.constructionArea] 建设面积
 * @param {string} [data.constructionCompletionDate] 计划竣工 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.constructionDurationDays] 建设周期（天）
 * @param {string} [data.constructionStartDate] 计划开工 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.contactNumber] 联系电话
 * @param {string} [data.endDate] 计划结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.implementingCompany] 项目实施公司
 * @param {string} [data.projectAddress] 项目地址
 * @param {number} [data.projectDurationDays] 项目周期（天）
 * @param {number} [data.projectLatitude] 项目纬度
 * @param {number} [data.projectLongitude] 项目经度
 * @param {string} [data.projectManager] 项目负责人
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {array<ProjectPhase传输实体>} [data.projectPhaseList] 项目阶段List
 * @param {string} [data.projectSummary] 项目概述
 * @param {string} [data.projectType] 工程类型
 * @param {array<RelatedOrganization传输实体>} [data.relatedOrganizationList] 相关单位信息
 * @param {string} [data.startDate] 计划开始日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<ProjectPlanning页面展示实体>>}
 * @author 肖玮
 */
export function projectPlanningList(data, config) {
  return post("/projectPlanning/list", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器分页查询项目规划
 * @param {object} data
 * @param {string} [data.approvalEndDate] 立项结束日期
 * @param {string} [data.approvalStartDate] 立项开始日期
 * @param {string} [data.constructionType] 建设性质
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<ProjectPlanning页面展示实体>>}
 * @author 肖玮
 */
export function projectPlanningPage(data, config) {
  return post("/projectPlanning/page", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器立项单位
 * @param {object} params
 * @param {object} data
 * @param {string} params.unitName unitName
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<array<string>>}
 */
export function projectPlanningProjectInitiationUnitList(params, data, config) {
  return postWithQueryParams("/projectPlanning/projectInitiationUnitList", params, data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器首页项目概览
 * @param {object} data
 * @param {string} [data.approvalEndDate] 立项结束日期
 * @param {string} [data.approvalStartDate] 立项开始日期
 * @param {string} [data.constructionType] 建设性质
 * @param {number} [data.length] 分页大小
 * @param {number} [data.orderAsc] 排序方向
 * @param {string} [data.orderColum] 排序字段
 * @param {number} [data.pageIndex] 分页下标
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {number} [data.start] 查询记录起始下标
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<分页返回实体<HomeProjectOverviewVO页面展示实体>>}
 */
export function projectPlanningProjectOverview(data, config) {
  return post("/projectPlanning/projectOverview", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器项目规划关联模块数据
 * @param {object} params
 * @param {object} data
 * @param {number} params.id id
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<Set<string>>}
 * @author 肖玮
 */
export function projectPlanningRelation(params, data, config) {
  return postWithQueryParams("/projectPlanning/relation", params, data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器保存项目规划草稿
 * @param {object} data
 * @param {string} [data.approvalDate] 立项日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.approvingAuthority] 立项单位
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {number} [data.constructionArea] 建设面积
 * @param {string} [data.constructionCompletionDate] 计划竣工 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.constructionDurationDays] 建设周期（天）
 * @param {string} [data.constructionStartDate] 计划开工 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.contactNumber] 联系电话
 * @param {string} [data.endDate] 计划结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.implementingCompany] 项目实施公司
 * @param {string} [data.projectAddress] 项目地址
 * @param {number} [data.projectDurationDays] 项目周期（天）
 * @param {number} [data.projectLatitude] 项目纬度
 * @param {number} [data.projectLongitude] 项目经度
 * @param {string} [data.projectManager] 项目负责人
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {array<ProjectPhase传输实体>} [data.projectPhaseList] 项目阶段List
 * @param {string} [data.projectSummary] 项目概述
 * @param {string} [data.projectType] 工程类型
 * @param {array<RelatedOrganization传输实体>} [data.relatedOrganizationList] 相关单位信息
 * @param {string} [data.startDate] 计划开始日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 肖玮
 */
export function projectPlanningSaveDraft(data, config) {
  return post("/projectPlanning/saveDraft", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器更新项目规划提交
 * @param {object} data
 * @param {string} [data.approvalDate] 立项日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.approvingAuthority] 立项单位
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {number} [data.constructionArea] 建设面积
 * @param {string} [data.constructionCompletionDate] 计划竣工 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.constructionDurationDays] 建设周期（天）
 * @param {string} [data.constructionStartDate] 计划开工 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.contactNumber] 联系电话
 * @param {string} [data.endDate] 计划结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.implementingCompany] 项目实施公司
 * @param {string} [data.projectAddress] 项目地址
 * @param {number} [data.projectDurationDays] 项目周期（天）
 * @param {number} [data.projectLatitude] 项目纬度
 * @param {number} [data.projectLongitude] 项目经度
 * @param {string} [data.projectManager] 项目负责人
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {array<ProjectPhase传输实体>} [data.projectPhaseList] 项目阶段List
 * @param {string} [data.projectSummary] 项目概述
 * @param {string} [data.projectType] 工程类型
 * @param {array<RelatedOrganization传输实体>} [data.relatedOrganizationList] 相关单位信息
 * @param {string} [data.startDate] 计划开始日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 肖玮
 */
export function projectPlanningUpdate(data, config) {
  return post("/projectPlanning/update", data, config);
}

/**
 * 项目规划控制器 / 项目规划控制器更新项目规划草稿
 * @param {object} data
 * @param {string} [data.approvalDate] 立项日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.approvingAuthority] 立项单位
 * @param {array<附件传输实体>} [data.attachmentList] 附件材料
 * @param {number} [data.constructionArea] 建设面积
 * @param {string} [data.constructionCompletionDate] 计划竣工 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.constructionDurationDays] 建设周期（天）
 * @param {string} [data.constructionStartDate] 计划开工 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.constructionType] 建设性质
 * @param {string} [data.contactNumber] 联系电话
 * @param {string} [data.endDate] 计划结束日期 YYYY-MM-DD HH:mm:ss
 * @param {string} [data.implementingCompany] 项目实施公司
 * @param {string} [data.projectAddress] 项目地址
 * @param {number} [data.projectDurationDays] 项目周期（天）
 * @param {number} [data.projectLatitude] 项目纬度
 * @param {number} [data.projectLongitude] 项目经度
 * @param {string} [data.projectManager] 项目负责人
 * @param {string} [data.projectName] 项目名称
 * @param {string} [data.projectPhase] 项目阶段
 * @param {array<ProjectPhase传输实体>} [data.projectPhaseList] 项目阶段List
 * @param {string} [data.projectSummary] 项目概述
 * @param {string} [data.projectType] 工程类型
 * @param {array<RelatedOrganization传输实体>} [data.relatedOrganizationList] 相关单位信息
 * @param {string} [data.startDate] 计划开始日期 YYYY-MM-DD HH:mm:ss
 * @param {number} [data.totalInvestment] 总投资金额（元）
 * @param {import("axios").AxiosRequestConfig} [config]
 * @returns {Promise<number>}
 * @author 肖玮
 */
export function projectPlanningUpdateDraft(data, config) {
  return post("/projectPlanning/updateDraft", data, config);
}

/**
 * @template T
 * @typedef {Object} 分页返回实体
 * @property {T[]} content - 内容
 * @property {number} elementsNo
 * @property {number} limit
 * @property {number} number
 * @property {number} totalElements
 * @property {number} totalPages
 * @description 分页返回实体
 */

/**
 * @typedef {object} 附件传输实体 附件传输实体
 * @property {string} attUrl 附件url
 * @property {number} directoryId 目录id
 * @property {number} id 附件id
 * @property {string} originalName 原始文件名
 * @description 附件传输实体
 */

/**
 * @typedef {object} BusinessAttachDetailVO
 * @property {string} attKey 附件key
 * @property {number} attOrder 附件排序
 * @property {number} attSize 附件大小(单位:MB)
 * @property {string} attSizeString 附件大小
 * @property {string} attSuffix 附件后缀
 * @property {string} attUrl 附件url
 * @property {number} attachId 文件id
 * @property {number} attachmentType 文件类型
 * @property {number} businessId 业务ID
 * @property {string} businessType 业务类型
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识(false:否, true:是)
 * @property {number} directoryId 目录id
 * @property {string} filename 文件名称
 * @property {number} id 附件ID
 * @property {string} originalName 原始文件名
 * @property {string} remark 备注
 * @property {string} updateTime 修改时间
 * @property {string} updateUser 修改用户
 */

/**
 * @typedef {object} HomeProjectOverviewVO页面展示实体 HomeProjectOverviewVO页面展示实体
 * @property {string} approvalDate 立项日期
 * @property {string} constructionType 建设性质
 * @property {number} id 项目ID
 * @property {string} projectManager 项目负责人
 * @property {string} projectName 项目名称
 * @property {string} projectNumber 项目编号
 * @description HomeProjectOverviewVO页面展示实体
 */

/**
 * @typedef {object} ProjectPhase传输实体 项目阶段传输实体
 * @property {array<附件传输实体>} attachmentList 附件
 * @property {string} endDate 结束时间
 * @property {number} id 项目阶段id
 * @property {string} projectPhase 项目阶段
 * @property {number} projectPlanningId 项目规划id
 * @property {string} remarks 备注
 * @property {string} responsiblePerson 负责人
 * @property {string} startDate 开始时间
 * @property {string} status 状态
 * @description 项目阶段传输实体
 */

/**
 * @typedef {object} ProjectPhase页面展示实体 项目阶段页面展示实体
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {boolean} delFlag 删除标识 (0-未删除, 1-已删除)
 * @property {string} endDate 结束时间
 * @property {number} id
 * @property {boolean} isEdit 是否可编辑
 * @property {string} projectPhase 项目阶段
 * @property {string} projectPhaseName 项目阶段名称
 * @property {number} projectPlanningId 项目规划id
 * @property {string} remarks 备注
 * @property {string} responsiblePerson 负责人
 * @property {string} responsiblePersonName 负责人名称
 * @property {string} startDate 开始时间
 * @property {string} status 状态
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @description 项目阶段页面展示实体
 */

/**
 * @typedef {object} ProjectPlanning页面展示实体 项目规划表页面展示实体
 * @property {string} approvalDate 立项日期
 * @property {string} approvingAuthority 立项单位
 * @property {array<BusinessAttachDetailVO>} attachmentList 附件材料
 * @property {number} constructionArea 建设面积
 * @property {string} constructionCompletionDate 计划竣工
 * @property {number} constructionDurationDays 建设周期（天）
 * @property {string} constructionStartDate 计划开工
 * @property {string} constructionType 建设性质
 * @property {string} contactNumber 联系电话
 * @property {string} createTime 创建时间
 * @property {string} createUser 创建用户
 * @property {string} createUserName 编制人姓名
 * @property {boolean} delFlag 删除标识 (0-未删除, 1-已删除)
 * @property {string} departmentName 编制部门
 * @property {string} endDate 计划结束日期
 * @property {number} id 项目ID
 * @property {string} implementingCompany 项目实施公司
 * @property {boolean} isEdit 是否可编辑
 * @property {string} projectAddress 项目地址
 * @property {number} projectDurationDays 项目周期（天）
 * @property {number} projectLatitude 项目纬度
 * @property {number} projectLongitude 项目经度
 * @property {string} projectManager 项目负责人
 * @property {string} projectName 项目名称
 * @property {string} projectNumber 项目编号
 * @property {string} projectPhase 项目阶段
 * @property {array<ProjectPhase页面展示实体>} projectPhaseList 项目阶段List
 * @property {string} projectSummary 项目概述
 * @property {string} projectType 工程类型
 * @property {array<RelatedOrganization页面展示实体>} relatedOrganizationList 相关单位信息
 * @property {string} startDate 计划开始日期
 * @property {string} status 状态 可选值: SUBMITTED, UN_SUBMITTED
 * @property {number} statusCode 状态值
 * @property {string} statusName 状态名称
 * @property {number} totalInvestment 总投资金额（元）
 * @property {string} updateTime 更新时间
 * @property {string} updateUser 更新用户
 * @description 项目规划表页面展示实体
 */

/**
 * @typedef {object} RelatedOrganization传输实体 传输实体
 * @property {string} contactNumber 联系电话
 * @property {string} contactPerson 联系人
 * @property {string} organizationStructure 组织机构
 * @property {string} unitProperty 单位性质
 * @description 传输实体
 */

/**
 * @typedef {object} RelatedOrganization页面展示实体 页面展示实体
 * @property {string} contactNumber 联系电话
 * @property {string} contactPerson 联系人
 * @property {number} id
 * @property {string} organizationStructure 组织机构
 * @property {number} projectPlanningId 项目规划id
 * @property {string} unitProperty 单位性质
 * @description 页面展示实体
 */
